/*
堆区-动态分配---new/delete
	谁先创建 谁先构建
	谁先释放 谁先析构
栈区--局部变量
	谁先创建 谁先构建
	谁后创建 谁先析构
*/

#include <iostream>
#include <string>

using namespace std;

int num = 1;
class stu
{
private:
	int val;

public:
	// 无参构造
	stu()
	{
		val = num++;
		cout << "我是:" << val << "构建了" << endl;
	}
	stu(int stu_val)
	{
		val = stu_val;
		cout << "我是:" << val << "构建了" << endl;
	}
	~stu()
	{
		cout << "我是:" << val << "析构了" << endl;
	};
};

int main(int argc, char const *argv[])
{

	// 栈区  谁先创建 谁先构建    谁后创建 谁先析构
	// stu s1(1);
	// stu s2(2);
	// stu s3(3);
	// stu s4(4);
	/*	结果：
	我是:1构建了
	我是:2构建了
	我是:3构建了
	我是:4构建了
	我是:4析构了
	我是:3析构了
	我是:2析构了
	我是:1析构了
	*/

	// 堆区    谁先创建 谁先构建   谁先释放 谁先析构
	stu *s1 = new stu;
	stu *s2 = new stu;
	stu *s3 = new stu;
	stu *s4 = new stu;

	delete s1;
	delete s4;
	delete s3;
	delete s2;
	/*
	结果
	我是:1构建了
	我是:2构建了
	我是:3构建了
	我是:4构建了
	我是:1析构了
	我是:4析构了
	我是:3析构了
	我是:2析构了
	*/

	return 0;
}
